$(document).ready(function() {
    // 中国历史时期和事件数据
    const chinaPeriods = {
        '远古时期 (-2100前)': {
            '文明起源': ['黄帝统一部落', '尧舜禹传说', '原始农业发展'],
            '青铜文明': ['青铜器制作', '甲骨文发明', '天文历法发展']
        },
        '夏商周时期 (-2100~-771)': {
            '夏朝建立 (-2070)': ['禹传启建立世袭制', '青铜冶炼技术', '天文历法发展'],
            '商朝时期 (-1600~-1046)': ['甲骨文发明', '青铜器制作', '奴隶制度完善'],
            '周朝建立 (-1046)': ['周公制礼作乐', '分封制确立', '诸侯国林立']
        },
        '春秋战国 (-770~-221)': {
            '春秋五霸': ['齐桓公尊王攘夷', '晋文公称霸', '越王勾践复国'],
            '百家争鸣': ['孔子创立儒家', '老子道家思想', '墨子兼爱非攻'],
            '变法运动': ['管仲变法', '商鞅变法', '吴起变法']
        },
        '秦汉时期 (-221~220)': {
            '秦统一': ['秦始皇统一六国', '焚书坑儒', '修建长城'],
            '西汉盛世': ['张骞通西域', '司马迁写史记', '汉武帝巡狩'],
            '东汉科技': ['张衡发明地动仪', '蔡伦改进造纸', '华佗医术']
        },
        '三国两晋南北朝 (220~581)': {
            '三国鼎立': ['曹操统一北方', '诸葛亮治蜀', '孙权据江东'],
            '西晋统一': ['司马氏夺权', '八王之乱', '永嘉之乱'],
            '南北对峙': ['北魏孝文帝改革', '南朝建康繁华', '玄学兴起']
        },
        '隋唐时期 (581~907)': {
            '隋朝统一': ['文帝创科举', '炀帝修大运河', '营建东都'],
            '贞观之治': ['玄奘西行', '李世民治国', '创立三省六部'],
            '开元盛世': ['张九龄为相', '玄宗励精图治', '边疆安定']
        },
        '宋元时期 (960~1368)': {
            '北宋科技': ['毕昇发明活字印刷', '沈括著梦溪笔谈', '苏颂制造水运仪象台'],
            '南宋抗金': ['岳飞抗金', '文天祥殉国', '抗元名将陆秀夫'],
            '元朝统一': ['忽必烈建元', '马可波罗来华', '郑和下西洋']
        },
        '明清时期 (1368~1911)': {
            '明朝建立': ['朱元璋改革', '永乐大典编纂', '郑和下西洋'],
            '清朝鼎盛': ['康熙统一台湾', '雍正改革', '乾隆十全武功'],
            '清末新政': ['洋务运动', '戊戌变法', '清末新政']
        },
        '近现代 (1911至今)': {
            '民国时期': ['辛亥革命', '五四运动', '抗日战争'],
            '新中国成立': ['开国大典', '抗美援朝', '两弹一星'],
            '改革开放': ['经济特区建立', '香港澳门回归', '载人航天工程']
        }
    };

    // 世界历史时期和事件数据
    const worldPeriods = {
        '古代文明 (-3500~-800)': {
            '美索不达米亚文明': ['苏美尔文明', '巴比伦文明', '亚述文明'],
            '古埃及文明': ['金字塔建造', '象形文字', '法老制度'],
            '印度河流域文明': ['城市规划', '泥板文字', '宗教信仰']
        },
        '古典时期 (-800~476)': {
            '古希腊文明': ['城邦政治', '奥林匹克运动会', '苏格拉底哲学'],
            '波斯帝国': ['居鲁士大帝', '波斯帝国建立', '希波战争'],
            '罗马帝国': ['凯撒大帝', '斗兽场建造', '基督教兴起']
        },
        '中世纪 (476~1453)': {
            '拜占庭帝国': ['查士丁尼法典', '圣索菲亚大教堂', '东正教分裂'],
            '阿拉伯帝国': ['伊斯兰教创立', '阿拉伯数字', '丝绸之路繁荣'],
            '欧洲封建': ['十字军东征', '大学建立', '黑死病流行']
        },
        '文艺复兴 (1300~1600)': {
            '意大利复兴': ['但丁文学', '达芬奇艺术', '美第奇家族'],
            '地理大发现': ['哥伦布发现新大陆', '麦哲伦环球航行', '新航路开辟'],
            '宗教改革': ['马丁路德', '加尔文主义', '英国国教']
        },
        '启蒙运动 (1600~1800)': {
            '科学革命': ['伽利略', '牛顿万有引力', '显微镜发明'],
            '启蒙思想': ['伏尔泰', '卢梭社会契约论', '孟德斯鸠'],
            '工业革命': ['蒸汽机发明', '纺织业革命', '交通革命']
        },
        '近代革命 (1776~1871)': {
            '美国独立': ['独立宣言', '制宪会议', '联邦制确立'],
            '法国大革命': ['人权宣言', '拿破仑法典', '维也纳会议'],
            '民族统一': ['德意志统一', '意大利统一', '明治维新']
        },
        '两次世界大战 (1914~1945)': {
            '第一次世界大战': ['萨拉热窝事件', '凡尔登战役', '凡尔赛条约'],
            '俄国革命': ['列宁领导', '苏维埃政权', '共产国际'],
            '第二次世界大战': ['珍珠港事件', '诺曼底登陆', '原子弹爆炸']
        },
        '冷战时期 (1945~1991)': {
            '东西对峙': ['铁幕演说', '马歇尔计划', '柏林墙建立'],
            '科技竞赛': ['人类登月', '核武器竞赛', '太空竞赛'],
            '冷战结束': ['柏林墙倒塌', '苏联解体', '华沙条约解散']
        },
        '全球化时代 (1991至今)': {
            '科技革命': ['互联网普及', '智能手机革命', '人工智能发展'],
            '全球治理': ['欧盟成立', '联合国维和', '气候变化应对'],
            '世界挑战': ['恐怖主义', '金融危机', '新冠疫情']
        }
    };

    // 初始化中国历史树
    initializeTree('#chinaTree', chinaPeriods);
    
    // 初始化世界历史树
    initializeTree('#worldTree', worldPeriods);

    // 绑定展开/收起按钮事件
    $('#chinaExpandAll').click(function() {
        $('#chinaTree').jstree('open_all');
    });
    
    $('#chinaCollapseAll').click(function() {
        $('#chinaTree').jstree('close_all');
    });
    
    $('#worldExpandAll').click(function() {
        $('#worldTree').jstree('open_all');
    });
    
    $('#worldCollapseAll').click(function() {
        $('#worldTree').jstree('close_all');
    });

    // 发送按钮点击事件
    $('#sendButton').click(function() {
        sendMessage();
    });

    // 按Enter键发送消息
    $('#inputText').keypress(function(e) {
        if (e.which === 13 && !e.shiftKey) {
            e.preventDefault();
            sendMessage();
        }
    });

    // 初始化错误提示模态框
    const errorModal = new bootstrap.Modal(document.getElementById('errorModal'));

    // 初始化树形结构
    function initializeTree(selector, data) {
        // 准备jsTree数据
        const treeData = [];
        
        Object.entries(data).forEach(([period, events]) => {
            const periodNode = {
                text: period,
                children: []
            };
            
            Object.entries(events).forEach(([event, details]) => {
                const eventNode = {
                    text: event,
                    children: []
                };
                
                details.forEach(detail => {
                    eventNode.children.push({
                        text: detail
                    });
                });
                
                periodNode.children.push(eventNode);
            });
            
            treeData.push(periodNode);
        });
        
        // 初始化jsTree
        $(selector).jstree({
            'core': {
                'data': treeData,
                'themes': {
                    'responsive': false
                }
            }
        });
        
        // 绑定双击事件
        $(selector).on('dblclick.jstree', function(e) {
            const node = $(selector).jstree('get_node', $(e.target).closest('.jstree-node'));
            if (node) {
                // 获取完整路径
                const path = getNodePath(selector, node);
                if (path.length > 0) {
                    $('#inputText').val(path.join(' > '));
                }
            }
        });
    }

    // 获取节点路径
    function getNodePath(selector, node) {
        const path = [];
        path.unshift(node.text);
        
        let parent = $(selector).jstree('get_node', node.parent);
        while (parent && parent.id !== '#') {
            path.unshift(parent.text);
            parent = $(selector).jstree('get_node', parent.parent);
        }
        
        return path;
    }

    // 发送消息到服务器
    function sendMessage() {
        const message = $('#inputText').val().trim();
        if (!message) return;
        
        if (message.length <= 2) {
            showError('参数msg长度必须大于2个字符');
            return;
        }
        
        // 显示加载提示
        $('#loadingOverlay').show();
        $('#sendButton').prop('disabled', true);
        
        // 清空显示区域
        $('#displayText').html('<div class="text-primary">正在处理请求，请稍候...</div>');
        
        // 发送请求
        $.ajax({
            url: 'http://localhost:5000/chat',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({ msg: message }),
            timeout: 120000, // 120秒超时
            success: function(response) {
                if (response.code === 200) {
                    updateDisplay(response.data);
                } else {
                    showError(response.message || '未知错误');
                }
            },
            error: function(xhr, status, error) {
                let errorMsg = '请求失败';
                if (status === 'timeout') {
                    errorMsg = '请求超时，请稍后重试';
                } else if (xhr.responseJSON) {
                    errorMsg = xhr.responseJSON.message || errorMsg;
                }
                showError(errorMsg);
            },
            complete: function() {
                $('#loadingOverlay').hide();
                $('#sendButton').prop('disabled', false);
            }
        });
    }

    // 更新显示区域
    function updateDisplay(data) {
        const history = data.history;
        const characters = data.data;
        
        let html = '';
        
        // 添加历史背景
        html += `<div class="history-background">
                    <h3>历史背景</h3>
                    <p>${history}</p>
                 </div>`;
        
        // 添加角色信息
        if (characters && characters.length > 0) {
            html += '<h3>角色信息</h3>';
            
            characters.forEach(character => {
                html += `
                <div class="character-card">
                    <h4>${character.name || '未知角色'}</h4>
                    <div class="character-info">
                        <div><strong>性别：</strong>${character.sex || '未知'}</div>
                        <div><strong>年龄：</strong>${character.age || '未知'}</div>
                        <div><strong>职业：</strong>${character.job || '未知'}</div>
                    </div>
                    <div class="character-detail">
                        <strong>背景：</strong>
                        <p>${character.background || '无背景信息'}</p>
                    </div>
                    <div class="character-detail">
                        <strong>特点：</strong>
                        <p>${character.features || '无特点信息'}</p>
                    </div>
                    <div class="character-detail">
                        <strong>技能：</strong>
                        <p>${character.skills || '无技能信息'}</p>
                    </div>
                </div>`;
            });
        }
        
        $('#displayText').html(html);
    }

    // 显示错误信息
    function showError(message) {
        $('#errorModalBody').text(message);
        errorModal.show();
        $('#displayText').html(`<div class="text-danger">错误: ${message}</div>`);
    }

    // 实现重试机制
    let retryCount = 0;
    const maxRetries = 3;

    function retryRequest(url, data, successCallback, errorCallback) {
        $.ajax({
            url: url,
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data),
            timeout: 120000,
            success: function(response) {
                retryCount = 0;
                successCallback(response);
            },
            error: function(xhr, status, error) {
                if (retryCount < maxRetries && status !== 'abort') {
                    retryCount++;
                    setTimeout(function() {
                        retryRequest(url, data, successCallback, errorCallback);
                    }, 1000 * retryCount); // 递增重试延迟
                } else {
                    retryCount = 0;
                    errorCallback(xhr, status, error);
                }
            }
        });
    }
});